home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / gedit-2 / plugins / snippets / SubstitutionParser.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  7.0 KB  |  216 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5.  
  6. class ParseError(Exception):
  7.     
  8.     def __str__(self):
  9.         return 'Parse error, resume next'
  10.  
  11.  
  12.  
  13. class Modifiers:
  14.     
  15.     def _first_char(s):
  16.         if not s != '' or s[0]:
  17.             pass
  18.         first = ''
  19.         if not len(s) > 1 or s[1:]:
  20.             pass
  21.         rest = ''
  22.         return (first, rest)
  23.  
  24.     
  25.     def upper_first(s):
  26.         (first, rest) = Modifiers._first_char(s)
  27.         return '%s%s' % (first.upper(), rest)
  28.  
  29.     
  30.     def upper(s):
  31.         return s.upper()
  32.  
  33.     
  34.     def lower_first(s):
  35.         (first, rest) = Modifiers._first_char(s)
  36.         return '%s%s' % (first.lower(), rest)
  37.  
  38.     
  39.     def lower(s):
  40.         return s.lower()
  41.  
  42.     
  43.     def title(s):
  44.         return s.title()
  45.  
  46.     upper_first = staticmethod(upper_first)
  47.     upper = staticmethod(upper)
  48.     lower_first = staticmethod(lower_first)
  49.     lower = staticmethod(lower)
  50.     title = staticmethod(title)
  51.     _first_char = staticmethod(_first_char)
  52.  
  53.  
  54. class SubstitutionParser:
  55.     REG_ID = '[0-9]+'
  56.     REG_NAME = '[a-zA-Z_]+'
  57.     REG_MOD = '[a-zA-Z]+'
  58.     REG_ESCAPE = '\\\\|\\(\\?|,|\\)'
  59.     
  60.     def __init__(self, pattern, groups = { }, modifiers = { }):
  61.         self.pattern = pattern
  62.         self.groups = groups
  63.         self.REG_GROUP = '(?:(%s)|<(%s|%s)(?:,(%s))?>)' % (self.REG_ID, self.REG_ID, self.REG_NAME, self.REG_MOD)
  64.         self.modifiers = {
  65.             'u': Modifiers.upper_first,
  66.             'U': Modifiers.upper,
  67.             'l': Modifiers.lower_first,
  68.             'L': Modifiers.lower,
  69.             't': Modifiers.title }
  70.         for k, v in modifiers.items():
  71.             self.modifiers[k] = v
  72.         
  73.  
  74.     
  75.     def parse(self):
  76.         (result, tokens) = self._parse(self.pattern, None)
  77.         return result
  78.  
  79.     
  80.     def _parse(self, tokens, terminator):
  81.         result = ''
  82.         while tokens != '':
  83.             if self._peek(tokens) == '' or self._peek(tokens) == terminator:
  84.                 tokens = self._remains(tokens)
  85.                 break
  86.             
  87.             
  88.             try:
  89.                 (res, tokens) = self._expr(tokens, terminator)
  90.             except ParseError:
  91.                 (res, tokens) = self._text(tokens)
  92.  
  93.             result += res
  94.         return (result, tokens)
  95.  
  96.     
  97.     def _peek(self, tokens, num = 0):
  98.         if num < len(tokens):
  99.             pass
  100.         return tokens[num]
  101.  
  102.     
  103.     def _token(self, tokens):
  104.         if tokens == '':
  105.             return ('', '')
  106.         if not len(tokens) > 1 or tokens[1:]:
  107.             pass
  108.         return (tokens[0], '')
  109.  
  110.     
  111.     def _remains(self, tokens, num = 1):
  112.         if not num < len(tokens) or tokens[num:]:
  113.             pass
  114.         return ''
  115.  
  116.     
  117.     def _expr(self, tokens, terminator):
  118.         if tokens == '':
  119.             return ''
  120.         
  121.         try:
  122.             return {
  123.                 '\\': self._escape,
  124.                 '(': self._condition }[self._peek(tokens)](tokens, terminator)
  125.         except KeyError:
  126.             tokens == ''
  127.             tokens == ''
  128.             raise ParseError
  129.         except:
  130.             tokens == ''
  131.  
  132.  
  133.     
  134.     def _text(self, tokens):
  135.         return self._token(tokens)
  136.  
  137.     
  138.     def _substitute(self, group, modifiers = ''):
  139.         if not self.groups.has_key(group) or self.groups[group]:
  140.             pass
  141.         result = ''
  142.         for modifier in modifiers:
  143.             if self.modifiers.has_key(modifier):
  144.                 result = self.modifiers[modifier](result)
  145.                 continue
  146.         
  147.         return result
  148.  
  149.     
  150.     def _match_group(self, tokens):
  151.         match = re.match('\\\\%s' % self.REG_GROUP, tokens)
  152.         if not match:
  153.             return (None, tokens)
  154.         if not match.group(1):
  155.             pass
  156.         if not match.group(3):
  157.             pass
  158.         return (self._substitute(match.group(2), ''), tokens[match.end():])
  159.  
  160.     
  161.     def _escape(self, tokens, terminator):
  162.         (result, tokens) = self._match_group(tokens)
  163.         if result != None:
  164.             return (result, tokens)
  165.         s = self.REG_GROUP
  166.         if terminator:
  167.             s += '|%s' % re.escape(terminator)
  168.         
  169.         match = re.match('\\\\(\\\\%s|%s)' % (s, self.REG_ESCAPE), tokens)
  170.         if not match:
  171.             raise ParseError
  172.         match
  173.         return (match.group(1), tokens[match.end():])
  174.  
  175.     
  176.     def _condition_value(self, tokens):
  177.         match = re.match('\\\\?%s\\s*' % self.REG_GROUP, tokens)
  178.         if not match:
  179.             return (None, tokens)
  180.         groups = match.groups()
  181.         if not groups[0]:
  182.             pass
  183.         name = groups[1]
  184.         if self.groups.has_key(name):
  185.             pass
  186.         return (self.groups[name] != None, tokens[match.end():])
  187.  
  188.     
  189.     def _condition(self, tokens, terminator):
  190.         if self._peek(tokens, 1) != '?':
  191.             raise ParseError
  192.         self._peek(tokens, 1) != '?'
  193.         tokens = self._remains(tokens, 2)
  194.         (condition, tokens) = self._condition_value(tokens)
  195.         if condition == None or self._peek(tokens) != ',':
  196.             raise ParseError
  197.         self._peek(tokens) != ','
  198.         (truepart, tokens) = self._parse(self._remains(tokens), ',')
  199.         if truepart == None:
  200.             raise ParseError
  201.         truepart == None
  202.         (falsepart, tokens) = self._parse(tokens, ')')
  203.         if falsepart == None:
  204.             raise ParseError
  205.         falsepart == None
  206.         if condition:
  207.             return (truepart, tokens)
  208.         return (falsepart, tokens)
  209.  
  210.     
  211.     def escape_substitution(substitution):
  212.         return re.sub('(%s|%s)' % (self.REG_GROUP, self.REG_ESCAPE), '\\\\\\1', substitution)
  213.  
  214.     escapesubstitution = staticmethod(escape_substitution)
  215.  
  216.